package com.gxa.weixing.pc.service;

import com.github.pagehelper.PageInfo;
import com.gxa.weixing.core.exception.BusinessException;
import com.gxa.weixing.core.pojo.Manager;
import com.gxa.weixing.core.pojo.ManagerModel;
import com.gxa.weixing.core.pojo.Menu;
import com.gxa.weixing.core.service.BaseService;

import java.text.ParseException;
import java.util.List;
import java.util.Map;

/**
 * @Author ChenJ
 * @date 2022/01/05 16:51
 **/
public interface ManagerService extends BaseService<Manager> {

    /**
     * 通过手机号查询当前管理所有权限菜单列表，并分层级显示
     * @param phone 手机号
     * @return 权限菜单列表
     */
    List<Menu> getMenus(String phone);

    /**
     *获取管理员的角色和权限列表
     * @param phone 手机号
     * @return ManagerModel
     */
    ManagerModel getManagerMenus(String phone);

    /**
     * 通过手机号查出管理员信息
     * @param phone 手机号
     * @return 管理员对象
     */
    Manager getByPhone(String phone);

    /**
     * 分页查询所有管理员对象信息
     * @param page 页数
     * @param size 每页记录数
     * @return list
     */
    PageInfo getAll(Integer page, Integer size) throws ParseException;

    /**
     * 条件查询管理对象信息
     * @param page 页数
     * @param size 每页记录数
     * @param shopId 门店编号
     * @param name 管理员姓名
     * @param state 管理员状态
     * @return list
     */
    PageInfo getListBy(Integer page, Integer size,
            Long shopId, Long state, String name) throws ParseException;

    /**
     * 添加管理员的方法(同时涉及分配该管理员角色、所属门店)
     * @param map shopId: 所属门店的编号
     *            name: 管理员姓名
     *            phone: 管理员手机号
     *            roleId: 权限配置/对应权限组的编号
     *            state: 管理员账号的状态(0/冻结 1/正常)
     *
     * @return 影响行数
     */
    Integer add(Map<String,String> map) throws BusinessException;

    /**
     * 修改管理员的方法(同时涉及分配该管理员角色、所属门店)
     * @param map shopId: 所属门店的编号
     *            name: 管理员姓名
     *            phone: 管理员手机号
     *            roleId: 权限配置/对应权限组的编号
     *            state: 管理员账号的状态(0/冻结 1/正常)
     *
     * @return 影响行数
     */
    Integer update(Map<String,String> map) throws BusinessException;

    /**
     * 删除管理员的方法(同时删除管理员拥有的角色)
     * @param id 管理员的编号
     * @return 影响行数
     * @throws BusinessException
     */
    Integer delete(Long id) throws BusinessException;

}
